// 基于axios封装，网络请求的函数
import axios from 'axios'
import store from '@/store'
import {useRouter} from 'vue-router'
import {ElMessage} from 'element-plus'
// import {Message} from 'element-plus'

// export const baseURL="http://127.0.0.1:3007"

// axios.create()创建一个带配置项的自定义axios函数
// myAxios请求的时候，地址baseURl+url，然后去请求后台
const myAxios=axios.create({
    baseURL:"http://127.0.0.1:3007"
})

// 定义请求拦截器
// api里每次调用request都会先走这个请求拦截器
myAxios.interceptors.request.use(function(config){
    // 在请求前会触发一次
  // 他返回给axios内源码，config配置对象（要请求后台的参数都在这个对象上）
  // console.log('config', config)

  // 判断，登录页面和注册页面，vuex里无token，而且登录接口也不需要携带token（其他页面需要）
  if(store.state.token){
        // 在发起时，统一携带请求体Authorization和token值
        config.headers.Authorization=store.state.token
    }
    return config
},function(error){
    // 返回一个拒绝状态的Promise对象（axios留在原地的Promise对象状态就为结果为error变量值）
  // 此函数类似catch函数（）里return
  // 口诀：return非Promise对象值，会作为成功的结果，返回给 下一个Promise对象（axios留在原地）
  // 口诀：return Promise对象，这个Promise对象状态，返回给下一个Promise对象
  // Promise.reject()原地留下一个新的Promise对象（状态为失败）它是Promise的类方法reject()
  return Promise.reject(error)
//   return Promise.reject("上传失败")
})

// 定义响应拦截器
myAxios.interceptors.response.use(function(response){
    // 响应http状态码为2xx或3xx时触发成功的回调，形参中的response是‘成功的结果’
    return response
},function(error){
    const router=useRouter()
    
    if(error.response.status===401){
        // store.commit("updateToken",'')
        // store.commit('updateUserInfo', '')
        router.push('/login')
        // Message.error('用户身份已过期！！！')
    }
    return Promise.reject(error)
    // ElMessage.error('添加失败');       
})

export default myAxios

